/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Manejadores;

import Excepciones.FechaIncorrectaException;
import Excepciones.FechaSuperiorException;
import Persistencia.ADOAccion;
import Persistencia.ADOProyecto;
import Reporte.ReporteParametrizado;
import java.util.Calendar;
import java.util.Date;
import java.util.Iterator;

/**
 *
 * @author Cynthia
 */
public class ManejadorMetricas {

    private ADOAccion adoAcci;
    private ReporteParametrizado metricas;
    private String titulo, fechaInicioMes, fechaFinMes;
    //ruta de las métricas (reporte a utilizar)
    /*
    private String metricaCantidadMensual = System.getProperty("user.dir") + "/src/Reporte/metricaCantidadAccionesMensual.jasper";
    private String metricaCantidadAnual = System.getProperty("user.dir") + "/src/Reporte/metricaCantidadAccionesAnual.jasper";    
    private String metricaCantidadHistorico = System.getProperty("user.dir") + "/src/Reporte/metricaCantidadAccionesHistorico.jasper";    
    private String metricaPromedioResolucionMensual = System.getProperty("user.dir") + "/src/Reporte/metricaPromedioTiempoMensual.jasper";    
    private String metricaPromedioResolucionAnual = System.getProperty("user.dir") + "/src/Reporte/metricaPromedioTiempoAnual.jasper";    
    private String metricaPromedioResolucionHistorico = System.getProperty("user.dir") + "/src/Reporte/metricaPromedioTiempoHistorico.jasper";
    */
     
     private String metricaCantidadMensual = "lib\\metricaCantidadAccionesMensual.jasper";
     private String metricaCantidadAnual = "lib\\metricaCantidadAccionesAnual.jasper";
     private String metricaCantidadHistorico = "lib\\metricaCantidadAccionesHistorico.jasper";
     private String metricaPromedioResolucionMensual = "lib\\metricaPromedioTiempoMensual.jasper";
     private String metricaPromedioResolucionAnual = "lib\\metricaPromedioTiempoAnual.jasper";
     private String metricaPromedioResolucionHistorico = "lib\\metricaPromedioTiempoHistorico.jasper";

    public ManejadorMetricas() {
        this.adoAcci = new ADOAccion();
    }

    //metodo encargado de solicitar a las métricas que se muestren. Recibi un tipo de métrica para saber cual es la solicitada
    public void mostrarMetricaHistorico(String proyecto, int tipoMetrica) {
        metricas = new ReporteParametrizado();
        titulo = "histórico";
        if (tipoMetrica == 1) {
            metricas.showReport(adoAcci.getConexion(), proyecto, metricaCantidadHistorico, titulo);
        } else {
            metricas.showReport(adoAcci.getConexion(), proyecto, metricaPromedioResolucionHistorico, titulo);
        }

    }
//Este método se encarga de solicitar a las métricas que se muestren. Recibi un tipo de métrica para saber cual es la solicitada, junto con el mes y el año requerido

    public void mostrarMetricaMensual(String proyecto, int mes, int año, int tipoMetrica) throws FechaIncorrectaException, FechaSuperiorException {

        this.validarAño(año);
        String mesString = "";
        String añoString = "" + año;
        String mesNombre = this.nombrarMes(mes);
        metricas = new ReporteParametrizado();
        switch (mes) {
            case 1:
                mesString = "01";
                break;
            case 2:
                mesString = "02";
                break;
            case 3:
                mesString = "03";
                break;
            case 4:
                mesString = "04";
                break;
            case 5:
                mesString = "05";
                break;
            case 6:
                mesString = "06";
                break;
            case 7:
                mesString = "07";
                break;
            case 8:
                mesString = "08";
                break;
            case 9:
                mesString = "09";
                break;
            default:
                mesString = "" + mes;
                break;
        }
        titulo = "en el mes de " + mesNombre + " del " + año;
        fechaFinMes = año + "-" + mesString + "-" + this.cantidadDiasMes(mesString);
        fechaInicioMes = año + "-" + mesString + "-01";
        if (tipoMetrica == 1) {
            metricas.showReport(adoAcci.getConexion(), proyecto, metricaCantidadMensual, añoString, mesString, fechaInicioMes, fechaFinMes, titulo);
        } else {
            metricas.showReport(adoAcci.getConexion(), proyecto, metricaPromedioResolucionMensual, añoString, mesString, fechaInicioMes, fechaFinMes, titulo);
        }
    }
//Este método se encarga de solicitar a las métricas que se muestren. Recibi un tipo de métrica para saber cual es la solicitada, junto con el año requerido

    public void mostrarMetricaAnual(String proyecto, int año, int tipoMetrica) throws FechaIncorrectaException, FechaSuperiorException {
        this.validarAño(año);
        titulo = "de " + año;
        String añoString = "" + año;
        if (tipoMetrica == 1) {
            metricas = new ReporteParametrizado();
            metricas.showReport(adoAcci.getConexion(), proyecto, metricaCantidadAnual, añoString, titulo);
        } else {
            metricas = new ReporteParametrizado();
            metricas.showReport(adoAcci.getConexion(), proyecto, metricaPromedioResolucionAnual, añoString, titulo);
        }
    }

    //Este método recibe por parámetro el mes y calcula la cantidad de días que tiene este
    private int cantidadDiasMes(String mesString) {
        int cantidadDias = 0;
        int mes = Integer.parseInt(mesString);
        if (mes == 1 || mes == 5 || mes == 3 || mes == 7 || mes == 8 || mes == 10 || mes == 12) {
            cantidadDias = 31;
        } else {
            if (mes == 2) {
                cantidadDias = 29;
            } else {
                cantidadDias = 30;
            }

        }
        return cantidadDias;
    }
//metodo que valida que no se ingrese un año mayor al actual

    private void validarAño(int año) throws FechaIncorrectaException, FechaSuperiorException {
        Calendar actual = Calendar.getInstance();// obtengo fecha actual
        if (año > actual.get(Calendar.YEAR)) {
            throw new FechaSuperiorException();
        }

    }

    private String nombrarMes(int mes) {
        String nombreMes = "";
        switch (mes) {
            case 1:
                nombreMes = "Enero";
                break;
            case 2:
                nombreMes = "Febrero";
                break;
            case 3:
                nombreMes = "Marzo";
                break;
            case 4:
                nombreMes = "Abril";
                break;
            case 5:
                nombreMes = "Mayo";
                break;
            case 6:
                nombreMes = "Junio";
                break;
            case 7:
                nombreMes = "Julio";
                break;
            case 8:
                nombreMes = "Agosto";
                break;
            case 9:
                nombreMes = "Septiembre";
                break;
            case 10:
                nombreMes = "Octubre";
                break;
            case 11:
                nombreMes = "Noviembre";
                break;
            case 12:
                nombreMes = "Diciembre";
                break;
        }
        return nombreMes;
    }

    //metodo que pasa un iterator para que la interfaz llene el combo de proyectos
    public Iterator CargarProyectos(String usuario) {
        ADOProyecto adoProy = new ADOProyecto();
        Iterator iter = adoProy.traerSoloNombresProyectosParaUsuarioLogueado(usuario).iterator();
        return iter;

    }
}
